OverloadedLabels
[GHC-8.0.1]fieldに`#`を付けた、`#foo`のような関数を、多相getterとして扱える[OverloadedRecordFields]の3分割されたものの1つ[docs https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/overloaded_labels.html#extension-OverloadedLabels]
data T = MkT { x :: Int }
instance HasField "x" T Int where
getField _ = x
instance UpdateField "x" T T Int where
setField _ (MkT _) x = MkT x